package br.com.websec.fornecedor;

import java.util.ArrayList;
import java.util.List;

import org.apache.log4j.Logger;
import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;

import br.com.websec.titulo.Titulo;

public class FornecedorDaoHibernate implements FornecedorDao {
	
	private static final Logger logger = Logger
	.getLogger(FornecedorDaoHibernate.class.getName());
	private Session session;

	public void setSession(Session session) {

		this.session = session;

	}

	@Override
	public void salvar(Fornecedor fornecedor) {
		try {
			this.session.save(fornecedor);

		} catch (HibernateException e) {
			logger.error("Não foi possível salvar objeto Fornecedor na base.: "
					+ e.getMessage());
		}

	}


	@Override
	public Fornecedor buscarPorId(Integer fornecedor) {
		
		String hql = "select  f from Fornecedor  f where f.idFornecedor = :idfornecedor";
		session.beginTransaction();
		org.hibernate.Query query = this.session.createQuery(hql);
		query.setParameter("idfornecedor", fornecedor);
		return (Fornecedor) query.uniqueResult();
		
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Fornecedor> listar() {
		List<Fornecedor> listaFornecedor = new ArrayList<Fornecedor>();
		
		session.beginTransaction();

		try {
			listaFornecedor = this.session.createCriteria(Fornecedor.class).list();
			session.beginTransaction().commit();
			
		} catch (HibernateException e) {
			logger.error("Não foi possível efetuar a busca dos objetos Fornecedores na base de dados.: " + e.getMessage());
			session.beginTransaction().rollback();
		}
		
		return listaFornecedor;
	}

	@Override
	public void alterar(Fornecedor fornecedor) {
		this.session.update(fornecedor);
		
	}

	@Override
	public Fornecedor buscarPorEmail(String email) {
		
		String hql = "select f from Fornecedor f where f.email =:email";
		Query consulta = this.session.createQuery(hql);
		consulta.setParameter("email", email);
		return (Fornecedor) consulta.uniqueResult();
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Fornecedor> listarFornecedores(Integer fornecedor) {

		List<Fornecedor> listaFornecedor = new ArrayList<Fornecedor>();
		String hql = "select  f from Fornecedor  f where f.idFornecedor = :idfornecedor";
		org.hibernate.Query query = this.session.createQuery(hql);
		query.setParameter("idfornecedor", fornecedor);
		listaFornecedor = query.list();
		return listaFornecedor;
		
	}

	@Override
	public List<Fornecedor> listarFornedoresSistema() {

		List<Fornecedor> listaFornecedor = new ArrayList<Fornecedor>();
		String hql = "select  f from Fornecedor where f.idFornecedor != 0";
		session.beginTransaction();
		org.hibernate.Query query = this.session.createQuery(hql);
		listaFornecedor = query.list();
		session.beginTransaction().commit();
		return listaFornecedor;

	}



}

